﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace YasharEl.Infrastructure.SoftwareModel.SOA
{
    /// <summary>
    /// Utility Services provide generic, application-agnostic services that deal with aspects other than transporting application messages. 
    /// Like Communication Services, the functionality they offer is part of the base infrastructure of an SOA 
    /// and is unrelated to any application-specific logic or business process. 
    /// For example, a discovery service may be used 
    /// by components in a loosely coupled composite application to discover other components 
    /// of the application based on some specified criteria; 
    /// for example, a service being deployed into a preproduction environment 
    /// may look for another service that implements a certain interface 
    /// that the first service needs and that is also deployed in the preproduction environment. 
    /// 
    /// Examples of Utility Services include security and id Entity Services 
    /// (for example, an Identity Federation Service or a Security Token Service), 
    /// discovery services (such as a UDDI server), and message-transformation services.
    /// 
    /// As in the case of Communication Services, 
    /// Utility Services may also be instructed or configured by a particular application 
    /// on how to perform an operation on their behalf. 
    /// For example, a message-transformation service may transform messages 
    /// from one message schema to another message schema based on a 
    /// transformation mapping that is provided by the application using the message-transformation service.
    /// 
    /// Although Utility Services do not hold any application state, 
    /// the state of a Utility Service may be affected by system state changes. 
    /// For example, a new user being added to the application may require an 
    /// update to the credential settings in the Security Token Service. 
    /// Unlike in the case of Communication Services, 
    /// Application Services directly interact with the Utility Services 
    /// that process and (if needed) respond to the messages 
    /// that the Application Services send them.
    /// 
    /// Users of Utility Services may require that a permission be configured for them 
    /// in order to use the service, 
    /// be it at the application, user, or the application-user scope. 
    /// For example, a discovery service may only serve domain-authenticated users 
    /// (users who have valid credentials issues by a Windows domain controller).
    /// 
    /// Like Communication Services, Utility Services may provide 
    /// application-level facilities for monitoring, diagnostics, BAM, and so on. 
    /// These may include statistical information about usage patterns 
    /// (how many users from another organization authenticated using a federated identity), 
    /// business-impacting error rates 
    /// (how many message format transformations of purchase orders 
    /// failed due to badly formatted incoming messages), and so forth. 
    /// As with Communication Services, 
    /// these facilities are typically generic features of the Utility Service 
    /// and need to be configured and consumed 
    /// by the particular solution in which they are utilized
    /// </summary>
    public interface IUtilityService : IInfrastructureService
    {
    }
}
